#include "musiclist.h"
#include <QMimeDatabase>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>

MusicList::MusicList()
{

}

void MusicList::addMusicsToList(const QList<QUrl> &urlList)
{
    for(auto e : urlList)
    {
        // 歌曲重复过滤
        if(musicPaths.contains(e.toLocalFile())) continue;
        // 歌曲不存在
        musicPaths.insert(e.toLocalFile());

        // 为了防止遗漏不知道的歌曲文件后缀，所以在第一次过滤显示文件的时候显示全部的文件，在这里进行第二次过滤
        // 即只添加歌曲相关的文件
        QMimeDatabase mime;
        QMimeType mimeType = mime.mimeTypeForFile(e.toLocalFile());
        QString name = mimeType.name();
        if(name == "audio/mpeg" || name == "audio/flac" || name == "audio/wav")
        {
            Music music(e);
            musicList.push_back(music);
        }
    }
}

iterator MusicList::findMusicByMusicId(const QString &musicId)
{
    for(auto it = begin();it != end();it++)
    {
        if(it->getMusicId() == musicId) return it;
    }
    return end();
}

iterator MusicList::begin()
{
    return musicList.begin();
}

iterator MusicList::end()
{
    return musicList.end();
}

void MusicList::writeToDB()
{
    for(auto music : musicList) music.insertMusicToDB();
}

void MusicList::readFromDB()
{
    QSqlQuery query;
    query.prepare("select musicId,musicName,musicSinger,musicAlbum,musicUrl,duration,isLike,isHistory from musicInfo");
    if(!query.exec())
    {
        qDebug() << "读取数据库失败：" << query.lastError().text();
        return;
    }
    // 一条一条的读取数据库行
    while(query.next())
    {
        Music music;
        music.setMusicId(query.value(0).toString());
        music.setMusicName(query.value(1).toString());
        music.setMusicSinger(query.value(2).toString());
        music.setMusicAlbum(query.value(3).toString());
        music.setMusicUrl("file:///" + query.value(4).toString());
        music.setDuration(query.value(5).toLongLong());
        music.setIsLike(query.value(6).toBool());
        music.setIsHistory(query.value(7).toBool());
        musicList.push_back(music);
        // 恢复歌曲的 url 信息
        musicPaths.insert(music.getMusicUrl().toLocalFile());
    }
}
